.. Licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 .. Copyright 2017 AT&T Intellectual Property. All rights reserved. Contrail Resource Parameters ---------------------------- ONAP requires the parameter names of certain Contrail Resources to follow specific naming conventions. This section provides these requirements. Contrail Network Parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Contrail based resources may require references to a Contrail network using the network FQDN. ONAP External Networks ~~~~~~~~~~~~~~~~~~~~~~ .. req:: :id: R-02164 :target: VNF :keyword: MUST :updated: frankfurt :validation_mode: static When a VNF's Heat Orchestration Template's Contrail resource ``OS::ContrailV2::InstanceIp`` and/or ``OS::ContrailV2::VirtualMachineInterface`` contains the property ``virtual_network_refs`` that references an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), the property value **MUST** be obtained by a ``get_param`` and the property parameter * **MUST** follow the format ``{network-role}_net_fqdn`` * **MUST** be declared as type ``string`` .. req:: :id: R-92193 :target: VNF :keyword: MUST NOT :updated: frankfurt :validation_mode: static A VNF's Heat Orchestration Template's Contrail resource ``OS::ContrailV2::InstanceIp`` and/or ``OS::ContrailV2::VirtualMachineInterface`` property ``virtual_network_refs`` parameter ``{network-role}_net_fqdn`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. *Example: Parameter declaration* .. code-block:: yaml parameters: {network-role}_net_fqdn: type: string description: Contrail FQDN for the {network-role} network *Example: Contrail Resource OS::ContrailV2::VirtualMachineInterface Reference to a Network FQDN.* In this example, the ``{network-role}`` has been defined as oam to represent an oam network and the ``{vm-type}`` has been defined as fw for firewall. The Contrail resource ``OS::ContrailV2::VirtualMachineInterface`` property ``virtual_network_refs`` references a contrail network FQDN. .. code-block:: yaml fw_0_oam_vmi_0: type: OS::ContrailV2::VirtualMachineInterface properties: name: str_replace: template: VM_NAME_virtual_machine_interface_1 params: VM_NAME: { get_param: fw_name_0 } virtual_machine_interface_properties: virtual_machine_interface_properties_service_interface_type: { get_param: oam_protected_interface_type } virtual_network_refs: - get_param: oam_net_fqdn security_group_refs: - get_param: fw_sec_grp_id Interface Route Table Prefixes for Contrail InterfaceRoute Table ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. req:: :id: R-28222 :target: VNF :keyword: MUST :updated: casablanca :validation_mode: static If a VNF's Heat Orchestration Template ``OS::ContrailV2::InterfaceRouteTable`` resource ``interface_route_table_routes`` property ``interface_route_table_routes_route`` map property parameter name **MUST** follow the format * ``{vm-type}_{network-role}_route_prefixes`` .. req:: :id: R-19756 :target: VNF :keyword: MUST :updated: casablanca :validation_mode: static If a VNF's Heat Orchestration Template ``OS::ContrailV2::InterfaceRouteTable`` resource ``interface_route_table_routes`` property ``interface_route_table_routes_route`` map property parameter ``{vm-type}_{network-role}_route_prefixes`` **MUST** be defined as type ``json``. .. req:: :id: R-76682 :target: VNF :keyword: MUST NOT :updated: casablanca :validation_mode: static If a VNF's Heat Orchestration Template ``OS::ContrailV2::InterfaceRouteTable`` resource ``interface_route_table_routes`` property ``interface_route_table_routes_route`` map property parameter ``{vm-type}_{network-role}_route_prefixes`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. The parameter ``{vm-type}_{network-role}_route_prefixes`` supports IP addresses in the format: 1. Host IP Address (e.g., 10.10.10.10) 2. CIDR Notation format (e.g., 10.0.0.0/28) *Example Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_route_prefixes: type: json description: JSON list of Contrail Interface Route Table route prefixes *Example:* .. code-block:: yaml parameters: vnf_name: type: string description: Unique name for this VF instance fw_oam_route_prefixes: type: json description: prefix for the ServiceInstance InterfaceRouteTable int_fw_dns_trusted_interface_type: type: string description: service_interface_type for ServiceInstance resources: : type: OS::ContrailV2::InterfaceRouteTable depends_on: [resource name of OS::ContrailV2::ServiceInstance] properties: name: str_replace: template: VNF_NAME_interface_route_table params: VNF_NAME: { get_param: vnf_name } interface_route_table_routes: interface_route_table_routes_route: { get_param: fw_oam_route_prefixes } service_instance_refs: - get_resource: service_instance_refs_data: - service_instance_refs_data_interface_type: { get_param: oam_interface_type } Resource OS::ContrailV2::InstanceIp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The Contrail resource ``OS::ContrailV2::InstanceIp`` has two properties that parameters **MUST** follow an explicit naming convention. The properties are ``instance_ip_address`` and ``subnet_uuid``. *Example OS::ContrailV2::InstanceIp Resource* .. code-block:: yaml : type: OS::ContrailV2::InstanceIp properties: name: { get_param: name } fq_name: { get_param: fq_name } display_name: { get_param: display_name } secondary_ip_tracking_ip: { secondary_ip_tracking_ip_ip_prefix: { get_param: secondary_ip_tracking_ip_ip_prefix }, secondary_ip_tracking_ip_ip_prefix_len: { get_param: secondary_ip_tracking_ip_ip_prefix_len }, } instance_ip_address: { get_param: instance_ip_address } instance_ip_mode: { get_param: instance_ip_mode } subnet_uuid: { get_param: subnet_uuid } instance_ip_family: { get_param: instance_ip_family } annotations: { annotations_key_value_pair: [{ annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key }, annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value }, }], } instance_ip_local_ip: { get_param: instance_ip_local_ip } instance_ip_secondary: { get_param: instance_ip_secondary } physical_router_refs: [{ get_param: physical_router_refs }] virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }] virtual_network_refs: [{ get_param: virtual_network_refs }] Resource OS::ContrailV2::InstanceIp Property instance_ip_address ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter **MUST** follow the same requirements that apply to the resource ``OS::Neutron`` property ``fixed_ips`` map property ``ip_address`` parameter. .. req:: :id: R-100000 :target: VNF :keyword: MUST :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter **MUST** be declared as either type ``string`` or type ``comma_delimited_list``. .. req:: :id: R-100010 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv4 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a string, the parameter name **MUST** follow the naming convention * ``{vm-type}_{network-role}_ip_{index}`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP external network * ``{index}`` is a numeric value that **MUST** start at zero in a VNF's Heat Orchestration Template and **MUST** increment by one .. req:: :id: R-100020 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_{network-role}_ip_{index}`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. ONAP's SDN-Controller assigns the IP Address and ONAP provides the value at orchestration to the Heat Orchestration Template. *Example ONAP External Network IPv4 Address string Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_ip_{index}: type: string description: Fixed IPv4 assignment for {vm-type} VM {index} on the {network-role} network .. req:: :id: R-100030 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv4 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a ``comma_delimited_list``, the parameter name **MUST** follow the naming convention * ``{vm-type}_{network-role}_ips`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP external network .. req:: :id: R-100040 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_{network-role}_ips`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. ONAP's SDN-Controller assigns the IP Address and ONAP provides the value at orchestration to the Heat Orchestration Template. *Example External Network IPv4 Address comma_delimited_list Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_ips: type: comma_delimited_list description: Fixed IPv4 assignments for {vm-type} VMs on the {network-role} network .. req:: :id: R-100050 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv6 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a string, the parameter name **MUST** follow the naming convention * ``{vm-type}_{network-role}_v6_ip_{index}`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP external network * ``{index}`` is a numeric value that **MUST** start at zero in a VNF's Heat Orchestration Template and **MUST** increment by one .. req:: :id: R-100060 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_{network-role}_v6_ip_{index}`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. ONAP's SDN-Controller assigns the IP Address and ONAP provides the value at orchestration to the Heat Orchestration Template. *Example ONAP External Network IPv6 Address string Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_v6_ip_{index}: type: string description: Fixed IPv6 assignment for {vm-type} VM {index} on the {network-role} network .. req:: :id: R-100070 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv6 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a ``comma_delimited_list``, the parameter name **MUST** follow the naming convention * ``{vm-type}_{network-role}_v6_ips`` where * ``{vm-type}`` is the {vm-type} associated with the OS::Nova::Server * ``{network-role}`` is the {network-role} of the ONAP external network .. req:: :id: R-100080 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_{network-role}_v6_ips`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. ONAP's SDN-Controller assigns the IP Address and ONAP provides the value at orchestration to the Heat Orchestration Template. *Example ONAP External Network IPv6 Address comma_delimited_list Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_v6_ips: type: comma_delimited_list description: Fixed IPv6 assignments for {vm-type} VMs on the {network-role} network .. req:: :id: R-100090 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666), and an IPv4 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a ``string``, the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_ip_{index}`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP internal network * ``{index}`` is a numeric value that **MUST** start at zero in a VNF's Heat Orchestration Template and **MUST** increment by one .. req:: :id: R-100100 :target: VNF :keyword: MUST :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_int_{network-role}_ip_{index}`` **MUST** be enumerated in the VNF's Heat Orchestration Template's Environment File. The IP address is local to the VNF's ONAP internal network and is (re)used in every VNF spin up, thus the constant value is declared in the VNF's Heat Orchestration Template's Environment File. *Example ONAP Internal Network IPv4 Address string Parameter Definition* .. code-block:: yaml parameters: {vm-type}_int_{network-role}_ip_{index}: type: string description: Fixed IPv4 assignment for {vm-type} VM {index} on the int_{network-role} network .. req:: :id: R-100110 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666), and an IPv4 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a ``comma_delimited_list``, the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_ips`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP internal network .. req:: :id: R-100120 :target: VNF :keyword: MUST :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_int_{network-role}_int_ips`` **MUST** be enumerated in the VNF's Heat Orchestration Template's Environment File. The IP address is local to the VNF's ONAP internal network and is (re)used in every VNF spin up, thus the constant value is declared in the VNF's Heat Orchestration Template's Environment File. *Example ONAP Internal Network IPv4 Address comma_delimited_list Parameter Definition* .. code-block:: yaml parameters: {vm-type}_int_{network-role}_ips: type: comma_delimited_list description: Fixed IPv4 assignments for {vm-type} VMs on the int_{network-role} network .. req:: :id: R-100130 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666), and an IPv6 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a ``string``, the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_v6_ip_{index}`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP internal network * ``{index}`` is a numeric value that **MUST** start at zero in a VNF's Heat Orchestration Template and **MUST** increment by one .. req:: :id: R-100140 :target: VNF :keyword: MUST :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter ``{vm-type}_int_{network-role}_v6_ip_{index}`` **MUST** be enumerated in the VNF's Heat Orchestration Template's Environment File. The IP address is local to the VNF's ONAP internal network and is (re)used in every VNF spin up, thus the constant value is declared in the VNF's Heat Orchestration Template's Environment File. *Example ONAP Internal Network IPv6 Address string Parameter Definition* .. code-block:: yaml parameters: {vm-type}_int_{network-role}_v6_ip_{index}: type: string description: Fixed IPv6 assignment for {vm-type} VM {index} on the int_{network-role} network .. req:: :id: R-100150 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666), and an IPv6 address is assigned using the property ``instance_ip_address`` and the parameter type is defined as a ``comma_delimited_list``, the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_v6_ips`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP internal network .. req:: :id: R-100160 :target: VNF :keyword: MUST :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` map property ``ip_address`` parameter ``{vm-type}_int_{network-role}_v6_ips`` **MUST** be enumerated in the VNF's Heat Orchestration Template's Environment File. The IP address is local to the VNF's ONAP internal network and is (re)used in every VNF spin up, thus the constant value is declared in the VNF's Heat Orchestration Template's Environment File. *Example ONAP Internal Network IPv6 Address comma_delimited_list Parameter Definition* .. code-block:: yaml parameters: {vm-type}_int_{network-role}_v6_ips: type: comma_delimited_list description: Fixed IPv6 assignments for {vm-type} VMs on the int_{network-role} network .. req:: :id: R-100170 :target: VNF :keyword: MUST NOT :introduced: dublin :updated: frankfurt :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter associated with an ONAP external network, i.e., * ``{vm-type}_{network-role}_ip_{index}`` * ``{vm-type}_{network-role}_v6_ip_{index}`` * ``{vm-type}_{network-role}_ips`` * ``{vm-type}_{network-role}_v6_ips`` **MUST NOT** be enumerated in the Heat Orchestration Template's Environment File. ONAP provides the IP address assignments at orchestration time. .. req:: :id: R-100180 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address`` parameter associated with an ONAP internal network, i.e., * ``{vm-type}_int_{network-role}_ip_{index}`` * ``{vm-type}_int_{network-role}_v6_ip_{index}`` * ``{vm-type}_int_{network-role}_ips`` * ``{vm-type}_int_{network-role}_v6_ips`` **MUST** be enumerated in the Heat Orchestration Template's Environment File and IP addresses **MUST** be assigned. *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property instance_ip_address* The property instance_ip_address uses the same parameter naming convention as the property fixed_ips and Map Property ip_address in OS::Neutron::Port. The resource is assigning an ONAP SDN-C Assigned IP Address. The {network-role} has been defined as oam_protected to represent an oam protected network and the {vm-type} has been defined as fw for firewall. .. code-block:: yaml fw_0_oam_protected_vmi_0_IP_0: type: OS::ContrailV2::InstanceIp depends_on: - fw_0_oam_protected_vmi_0 properties: virtual_machine_interface_refs: - get_resource: fw_0_oam_protected_vmi_0 virtual_network_refs: - get_param: oam_protected_net_fqdn instance_ip_address: { get_param: [fw_oam_protected_ips, get_param: index ] } Resource OS::ContrailV2::InstanceIp Property subnet_uuid ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter **MUST** follow the same requirements that apply to the resource ``OS::Neutron`` property ``fixed_ips`` map property ``subnet`` parameter. The resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter is used when a port is requesting an IP assignment via OpenStack's DHCP Service (i.e., cloud assigned). The IP address assignment will be made from the specified subnet. Specifying the subnet is not required; it is optional. If the network (external or internal) that the port is attaching to only contains one subnet, specifying the subnet is superfluous. The IP address will be assigned from the one existing subnet. If the network (external or internal) that the port is attaching to contains two or more subnets, specifying the subnet in the ``instance_ip_address`` property determines which subnet the IP address will be assigned from. If the network (external or internal) that the port is attaching to contains two or more subnets, and the subnet is not is not specified, OpenStack will randomly determine which subnet the IP address will be assigned from. The property ``instance_ip_address`` is used to assign IPs to a port. The property ``subnet_uuid`` specifies the subnet the IP is assigned from. .. req:: :id: R-100190 :target: VNF :keyword: MUST :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter **MUST** be declared type ``string``. .. req:: :id: R-100200 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv4 address is being cloud assigned by OpenStack's DHCP Service and the ONAP external network IPv4 subnet is to be specified using the property ``subnet_uuid``, the parameter **MUST** follow the naming convention * ``{network-role}_subnet_id`` where * ``{network-role}`` is the network role of the ONAP external network. Note that ONAP only supports cloud assigned IP addresses from one IPv4 subnet of a given network. .. req:: :id: R-100210 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter ``{network-role}_subnet_id`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. ONAP's SDN-Controller provides the network's subnet's UUID value at orchestration to the Heat Orchestration Template. *Example Parameter Definition* .. code-block:: yaml parameters: {network-role}_subnet_id: type: string description: Neutron IPv4 subnet UUID for the {network-role} network .. req:: :id: R-100220 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv6 address is being cloud assigned by OpenStack's DHCP Service and the ONAP external network IPv6 subnet is to be specified using the property ``subnet_uuid``, the parameter **MUST** follow the naming convention * ``{network-role}_v6_subnet_id`` where * ``{network-role}`` is the network role of the ONAP external network. Note that ONAP only supports cloud assigned IP addresses from one IPv6 subnet of a given network. .. req:: :id: R-100230 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter ``{network-role}_v6_subnet_id`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. ONAP's SDN-Controller provides the network's subnet's UUID value at orchestration to the Heat Orchestration Template. *Example Parameter Definition* .. code-block:: yaml parameters: {network-role}_v6_subnet_id: type: string description: Neutron IPv6 subnet UUID for the {network-role} network .. req:: :id: R-100240 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When * the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::InstanceIp`` in an Incremental Module is assigning an IP address to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666) that is created in the Base Module, AND * an IPv4 address is being cloud assigned by OpenStack's DHCP Service AND * the ONAP internal network IPv4 subnet is to be specified using the property ``subnet_uuid``, the parameter **MUST** follow the naming convention * ``int_{network-role}_subnet_id`` where * ``{network-role}`` is the network role of the ONAP internal network Note that the parameter **MUST** be defined as an ``output`` parameter in the base module. .. req:: :id: R-100250 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter ``int_{network-role}_subnet_id`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. The assumption is that ONAP internal networks are created in the base module. The subnet network ID will be passed as an output parameter (e.g., ONAP Base Module Output Parameter) to the incremental modules. In the incremental modules, the output parameter name will be defined as input parameter. *Example Parameter Definition* .. code-block:: yaml parameters: int_{network-role}_subnet_id: type: string description: Neutron IPv4 subnet UUID for the int_{network-role} network .. req:: :id: R-100260 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When * the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::InstanceIp`` in an Incremental Module is attaching to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666) that is created in the Base Module, AND * an IPv6 address is being cloud assigned by OpenStack's DHCP Service AND * the ONAP internal network IPv6 subnet is to be specified using the property ``subnet_uuid``, the parameter **MUST** follow the naming convention * ``int_{network-role}_v6_subnet_id`` where ``{network-role}`` is the network role of the ONAP internal network. Note that the parameter **MUST** be defined as an ``output`` parameter in the base module. .. req:: :id: R-100270 :target: VNF :keyword: MUST NOT :introduced: dublin :validation_mode: static The VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid`` parameter ``int_{network-role}_v6_subnet_id`` **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. *Example Parameter Definition* .. code-block:: yaml parameters: int_{network-role}_v6_subnet_id: type: string description: Neutron subnet UUID for the int_{network-role} network *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property subnet_uuid* The property ``instance_ip_address`` uses the same parameter naming convention as the property ``fixed_ips`` and Map Property ``subnet`` in ``OS::Neutron::Port``. The resource is assigning a cloud assigned IP Address. The ``{network-role}`` has been defined as "oam_protected" to represent an oam protected network and the ``{vm-type}`` has been defined as "fw" for firewall. .. code-block:: yaml fw_0_oam_protected_vmi_0_IP_0: type: OS::ContrailV2::InstanceIp depends_on: - fw_0_oam_protected_vmi_0 properties: virtual_machine_interface_refs: - get_resource: fw_0_oam_protected_vmi_0 virtual_network_refs: - get_param: oam_protected_net_fqdn subnet_uuid: { get_param: oam_protected_subnet_id } OS::ContrailV2::VirtualMachineInterface Property virtual_machine_interface_allowed_address_pairs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::VirtualMachineInterface`` map property, ``virtual_machine_interface_allowed_address_pairs``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` parameter **MUST** follow the same requirements that apply to the resource ``OS::Neutron::Port`` property ``allowed_address_pairs``, map property ``ip_address`` parameter. ONAP External Networks ~~~~~~~~~~~~~~~~~~~~~~ .. req:: :id: R-100280 :target: VNF :keyword: MUST NOT :introduced: dublin :updated: frankfurt :validation_mode: static If a VNF's Heat Orchestration Template's resource ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), the map property ``virtual_machine_interface_allowed_address_pairs``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` parameter **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's Environment File. .. req:: :id: R-100310 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv4 Virtual IP (VIP) is required to be supported by the ONAP data model, the map property ``virtual_machine_interface_allowed_address_pairs``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` parameter name **MUST** follow the naming convention * ``{vm-type}_{network-role}_floating_ip`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP external network And the parameter **MUST** be declared as type ``string``. The ONAP data model can only support one IPv4 VIP address. *Example Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_floating_ip: type: string description: IPv4 VIP for {vm-type} VMs on the {network-role} network .. req:: :id: R-100330 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and an IPv6 Virtual IP (VIP) is required to be supported by the ONAP data model, the map property ``virtual_machine_interface_allowed_address_pairs``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` parameter name **MUST** follow the naming convention * ``{vm-type}_{network-role}_floating_v6_ip`` where * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server`` * ``{network-role}`` is the {network-role} of the ONAP external network And the parameter **MUST** be declared as type ``string``. The ONAP data model can only support one IPv6 VIP address. *Example Parameter Definition* .. code-block:: yaml parameters: {vm-type}_{network-role}_floating_v6_ip: type: string description: IPv6 VIP for {vm-type} VMs on the {network-role} network .. req:: :id: R-100350 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's resource ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an ONAP external network (per the ONAP definition, see Requirement R-57424 and R-16968), and the IPv4 VIP address and/or IPv6 VIP address is **not** supported by the ONAP data model, the map property ``virtual_machine_interface_allowed_address_pairs``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` * Parameter name **MAY** use any naming convention. That is, there is no ONAP mandatory parameter naming convention. * Parameter **MAY** be declared as type ``string`` or type ``comma_delimited_list``. And the ``OS::ContrailV2::VirtualMachineInterface`` resource **MUST** contain resource-level ``metadata`` (not property-level). And the ``metadata`` format **MUST** must contain the key value ``aap_exempt`` with a list of all map property ``virtual_machine_interface_allowed_address_pairs``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``, ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` parameters **not** supported by the ONAP data model. ONAP Internal Networks ~~~~~~~~~~~~~~~~~~~~~~ .. req:: :id: R-100360 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666), and an IPv4 Virtual IP (VIP) address is assigned using the map property, ``virtual_machine_interface_allowed_address_pairs, virtual_machine_interface_allowed_address_pairs_allowed_address_pair, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` , the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_floating_ip`` where * ``{vm-type}`` is the {vm-type} associated with the OS::Nova::Server * ``{network-role}`` is the {network-role} of the ONAP internal network And the parameter **MUST** be declared as ``type: string`` and **MUST** be enumerated in the environment file. OR the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_floating_ips`` where * ``{vm-type}`` is the {vm-type} associated with the OS::Nova::Server * ``{network-role}`` is the {network-role} of the ONAP internal network And the parameter **MUST** be declared as ``type: comma_delimited_list`` and **MUST** be enumerated in the environment file. .. req:: :id: R-100370 :target: VNF :keyword: MUST :introduced: dublin :updated: frankfurt :validation_mode: static When the VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an ONAP internal network (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666), and an IPv6 Virtual IP (VIP) address is assigned using the map property, ``virtual_machine_interface_allowed_address_pairs, virtual_machine_interface_allowed_address_pairs_allowed_address_pair, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix`` , the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_floating_v6_ip`` where * ``{vm-type}`` is the {vm-type} associated with the OS::Nova::Server * ``{network-role}`` is the {network-role} of the ONAP internal network And the parameter **MUST** be declared as ``type: string`` and **MUST** be enumerated in the environment file OR the parameter name **MUST** follow the naming convention * ``{vm-type}_int_{network-role}_floating_v6_ips`` where * ``{vm-type}`` is the {vm-type} associated with the OS::Nova::Server * ``{network-role}`` is the {network-role} of the ONAP internal network And the parameter **MUST** be declared as ``type: comma_delimited_list`` and **MUST** be enumerated in the environment file. Example ~~~~~~~ *Example OS::ContrailV2::VirtualMachineInterface* .. code-block:: yaml : type: OS::ContrailV2::VirtualMachineInterface properties: name: { get_param: name } fq_name: { get_param: fq_name } ecmp_hashing_include_fields: { ecmp_hashing_include_fields_hashing_configured: { get_param: ecmp_hashing_include_fields_hashing_configured }, ecmp_hashing_include_fields_source_ip: { get_param: ecmp_hashing_include_fields_source_ip }, ecmp_hashing_include_fields_destination_ip: { get_param: ecmp_hashing_include_fields_destination_ip }, ecmp_hashing_include_fields_ip_protocol: { get_param: ecmp_hashing_include_fields_ip_protocol }, ecmp_hashing_include_fields_source_port: { get_param: ecmp_hashing_include_fields_source_port }, ecmp_hashing_include_fields_destination_port: { get_param: ecmp_hashing_include_fields_destination_port }, } virtual_machine_interface_host_routes: { virtual_machine_interface_host_routes_route: [{ virtual_machine_interface_host_routes_route_prefix: { get_param: virtual_machine_interface_host_routes_route_prefix }, virtual_machine_interface_host_routes_route_next_hop: { get_param: virtual_machine_interface_host_routes_route_next_hop }, virtual_machine_interface_host_routes_route_next_hop_type: { get_param: virtual_machine_interface_host_routes_route_next_hop_type }, virtual_machine_interface_host_routes_route_community_attributes: { virtual_machine_interface_host_routes_route_community_attributes_community_attribute: [{ get_param: virtual_machine_interface_host_routes_route_community_attributes_community_attribute }], }, }], } virtual_machine_interface_mac_addresses: { virtual_machine_interface_mac_addresses_mac_address: [{ get_param: virtual_machine_interface_mac_addresses_mac_address }], } virtual_machine_interface_dhcp_option_list: { virtual_machine_interface_dhcp_option_list_dhcp_option: [{ virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name }, virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value }, virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value_bytes: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value_bytes }, }], } virtual_machine_interface_bindings: { virtual_machine_interface_bindings_key_value_pair: [{ virtual_machine_interface_bindings_key_value_pair_key: { get_param: virtual_machine_interface_bindings_key_value_pair_key }, virtual_machine_interface_bindings_key_value_pair_value: { get_param: virtual_machine_interface_bindings_key_value_pair_value }, }], } virtual_machine_interface_disable_policy: { get_param: virtual_machine_interface_disable_policy } virtual_machine_interface_allowed_address_pairs: { virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [{ virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: { virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len }, }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac }, virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode }, }], } annotations: { annotations_key_value_pair: [{ annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key }, annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value }, }], } virtual_machine_interface_fat_flow_protocols: { virtual_machine_interface_fat_flow_protocols_fat_flow_protocol: [{ virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol }, virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port }, }], } virtual_machine_interface_device_owner: { get_param: virtual_machine_interface_device_owner } port_security_enabled: { get_param: port_security_enabled } virtual_machine_interface_properties: { virtual_machine_interface_properties_service_interface_type: { get_param: virtual_machine_interface_properties_service_interface_type }, virtual_machine_interface_properties_interface_mirror: { virtual_machine_interface_properties_interface_mirror_traffic_direction: { get_param: virtual_machine_interface_properties_interface_mirror_traffic_direction }, virtual_machine_interface_properties_interface_mirror_mirror_to: { virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name }, virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation }, virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address }, virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address }, virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance }, virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port }, virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header }, virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode }, virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header: { virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_ip_address }, virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_mac_address }, virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vni: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vni }, }, }, }, virtual_machine_interface_properties_local_preference: { get_param: virtual_machine_interface_properties_local_preference }, virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: virtual_machine_interface_properties_sub_interface_vlan_tag }, } display_name: { get_param: display_name } service_health_check_refs: [{ get_param: service_health_check_refs }] routing_instance_refs: [{ get_param: routing_instance_refs }] routing_instance_refs_data: [{ routing_instance_refs_data_direction: { get_param: routing_instance_refs_data_direction }, routing_instance_refs_data_vlan_tag: { get_param: routing_instance_refs_data_vlan_tag }, routing_instance_refs_data_src_mac: { get_param: routing_instance_refs_data_src_mac }, routing_instance_refs_data_dst_mac: { get_param: routing_instance_refs_data_dst_mac }, routing_instance_refs_data_mpls_label: { get_param: routing_instance_refs_data_mpls_label }, routing_instance_refs_data_service_chain_address: { get_param: routing_instance_refs_data_service_chain_address }, routing_instance_refs_data_ipv6_service_chain_address: { get_param: routing_instance_refs_data_ipv6_service_chain_address }, routing_instance_refs_data_protocol: { get_param: routing_instance_refs_data_protocol }, }] security_group_refs: [{ get_param: security_group_refs }] physical_interface_refs: [{ get_param: physical_interface_refs }] port_tuple_refs: [{ get_param: port_tuple_refs }] interface_route_table_refs: [{ get_param: interface_route_table_refs }] virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }] virtual_network_refs: [{ get_param: virtual_network_refs }] virtual_machine_refs: [{ get_param: virtual_machine_refs }] qos_config_refs: [{ get_param: qos_config_refs }] virtual_machine: { get_param: virtual_machine } project: { get_param: project }